import pandas as pd
import numpy as np

# 读取Excel文件
df = pd.read_excel(r'TOP250.xlsx')
# 添加副本
df_c = df.copy()
# 筛选出语言是汉语普通话和英语的数据
filtered_Ch_df = df[(df['语言'] == '汉语普通话')]
filtered_En_df = df[(df['语言'] == '英语')]
print('语言是汉语普通话的数据：')
print(filtered_Ch_df)
print('语言是英语的数据：')
print(filtered_En_df)

# 筛选出国家/地区是中国的数据
filtered_country_df = df[df['国家/地区'] == '中国']
print('国家/地区是中国的数据：')
print(filtered_country_df)

# 筛选出电影评分大于9.5分的前20电影数据
filtered_rating_df = df[df['评分'] > 9.5].sort_values(by='评分', ascending=False).head(20)
print('评分大于9.5分的前20电影数据:')
print(filtered_rating_df)

# 随机选择5%的行来清空时长数据
percentage_to_nullify = 0.05
rows_to_nullify = int(len(df) * percentage_to_nullify)
indices_to_nullify = df.sample(n=rows_to_nullify, random_state=42).index

# 将选中的行的时长,评分列设置为NaN
df_c.loc[indices_to_nullify, '时长(分钟)'] = np.nan
df_c.loc[indices_to_nullify, '评分'] = np.nan

# 保存清除部分数据的Excel文件
df_c.to_excel(r'TOP250_deletion.xlsx', index=False)

# 验证缺失值的数量
print("缺失的时长值数量:", df['时长(分钟)'].isnull().sum())

# 增加缺失值
mean_rating = df_c['评分'].mean()
df_c.loc[df_c['评分'].isnull(), '评分'] = mean_rating
df_c.loc[df_c['时长(分钟)'].isnull(), '时长(分钟)'] = 120

# 保存带有缺失值填充的Excel文件
df_c.to_excel('TOP250_filled.xlsx', index=False)

# 增加完全相同的重复数据
df_duplicate1 = pd.concat([df, df.iloc[:10]])  # 复制了前10行作为重复数据

# 增加不完全相同数据(选择最后5行的前3列添加到表后)
last_five_rows_first_three_cols = df.tail(5)[['片名', '上映年份', '评分']]
# 将新行追加到原表上
df_duplicate2 = pd.concat([df_duplicate1, last_five_rows_first_three_cols], ignore_index=True)

# 查找并处理完全相同的重复数据
df_deduplicated = df_duplicate2.drop_duplicates()

# 保存去重后的Excel文件
df_deduplicated.to_excel('TOP250_deduplicated.xlsx', index=False)
